//
// Created by Jisam on 30/09/2024 6:16 PM.
// Solution of  语文成绩
// 2024-09-30 18:26:28 AC 100 一维差分 + 一维前缀和还原
#include <bits/stdc++.h>

#define  int long long
#define  endl "\n"
using namespace std;

const int MAXN = 1e7;
int a[MAXN];

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int n, p; // 定义两个整数变量n和p
    cin >> n >> p; // 从标准输入读取n和p的值

    for (int i = 1; i <= n; i++) {
        cin >> a[i]; // 从标准输入读取n个整数到数组a中
    }

    // 计算前缀差分数组
    for (int i = n; i > 1; i--) {
        a[i] -= a[i - 1]; // 将a[i]的值减去a[i-1]的值
    }

    // 读取额外的操作，并对数组a进行修改
    for (int i = 1; i <= p; i++) {
        int x, y, z;
        cin >> x >> y >> z; // 读取三个整数x, y, z
        a[x] += z; // 将a[x]的值增加z
        a[y + 1] -= z; // 将a[y+1]的值减去z
    }

    int _min = INT_MAX; // 定义一个整数_min，用于存储数组中的最小值，初始值为INT_MAX
    for (int i = 1; i <= n; i++) {
        a[i] += a[i - 1]; // 计算前缀和
        _min = min(a[i], _min); // 更新_min为当前a[i]和已有最小值中的较小者
    }

    // 输出数组a中的最小值
    cout << _min << endl;
    return 0;
}